#include <stdio.h>
#include <stdbool.h>

// 函数声明
bool isLeapYear(int year);
int dayOfYear(int year, int month, int day);

int main() {
    int year, month, day;

    // 提示用户输入年、月、日
    printf("请输入年份: ");
    scanf("%d", &year);
    printf("请输入月份: ");
    scanf("%d", &month);
    printf("请输入日期: ");
    scanf("%d", &day);

    // 计算并输出结果
    int day_of_year = dayOfYear(year, month, day);
    if (day_of_year != -1) {
        printf("这是 %d 年的第 %d 天。\n", year, day_of_year);
    } else {
        printf("输入的日期无效，请检查输入。\n");
    }

    return 0;
}

// 判断是否为闰年
bool isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        return true;
    }
    return false;
}

// 计算某一天是该年的第几天
int dayOfYear(int year, int month, int day) {
    // 每个月的天数
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // 如果是闰年，二月有29天
    if (isLeapYear(year)) {
        days_in_month[1] = 29;
    }

    // 检查输入的日期是否有效
    if (month < 1 || month > 12 || day < 1 || day > days_in_month[month - 1]) {
        return -1; // 无效日期
    }

    // 计算天数
    int day_of_year = 0;
    for (int i = 0; i < month - 1; i++) {
        day_of_year += days_in_month[i];
    }
    day_of_year += day;

    return day_of_year;
}
